📘 View绘制
源码逐行解析
30章
· 从入门到内核
1
总览
View绘制流程总览
从Activity启动到ViewRootImpl,理解整个绘制链路的起点。
➡️
2
Window
Window与WindowManager
Window的概念、类型与层级,WindowManager如何添加View。
➡️
3
诞生
ViewRootImpl的诞生
ActivityThread.handleResumeActivity中ViewRootImpl的创建与关联。
➡️
4
布局
setContentView源码解析
PhoneWindow与DecorView的创建,布局加载到内容区域。
➡️
5
触发链
requestLayout的触发链
从View.requestLayout到ViewRootImpl.requestLayout的完整调用栈。
➡️
6
调度
scheduleTraversals与Choreographer
VSync信号的请求与同步,帧回调机制。
➡️
7
核心
performTraversals核心流程
测量、布局、绘制三大步骤的入口与调度逻辑。
➡️
8
规则
MeasureSpec的生成与规则
MeasureSpec的三种模式,根MeasureSpec如何由窗口尺寸决定。
➡️
9
测量
onMeasure源码解析
View的默认测量逻辑,setMeasuredDimension的调用时机。
➡️
10
遍历
ViewGroup的measure流程
measureChildWithMargins与getChildMeasureSpec的逐层传递。
➡️
11
实战
LinearLayout的onMeasure实战
权重分配与子View测量顺序的源码分析。
➡️
12
实战
RelativeLayout的onMeasure实战
两次遍历测量与依赖关系的处理。
➡️
13
布局
onLayout源码解析
View的布局定位,ViewGroup的抽象布局方法。
➡️
14
实战
LinearLayout的onLayout实战
垂直与水平方向的子View摆放逻辑。
➡️
15
实战
FrameLayout的onLayout实战
gravity属性对子View位置的影响。
➡️
16
绘制
onDraw源码解析
Canvas的创建与Bitmap的分配,绘制背景与内容。
➡️
17
分发
ViewGroup的dispatchDraw
绘制子View的遍历顺序与clipChildren的作用。
➡️
18
硬件
硬件加速绘制原理
DisplayList的构建与GPU渲染,软件绘制与硬件绘制的切换。
➡️
19
刷新
invalidate与postInvalidate
重绘请求的触发机制与区域刷新优化。
➡️
20
滚动
View的滚动机制
scrollTo与scrollBy的源码实现,滚动对绘制的影响。
➡️
21
弹性
Scroller与OverScroller
弹性滑动的实现原理,computeScrollOffset的调用时机。
➡️
22
触摸
View的触摸事件分发
dispatchTouchEvent与onTouchEvent的源码流程。
➡️
23
拦截
ViewGroup的事件拦截
onInterceptTouchEvent与requestDisallowInterceptTouchEvent。
➡️
24
焦点
View的焦点与键盘导航
焦点查找算法,键盘事件的分发流程。
➡️
25
动画
View的动画原理
View动画与属性动画的底层实现,invalidate在动画中的作用。
➡️
26
优化
View的绘制优化
过度绘制检测,ClipRect与merge的优化技巧。
➡️
27
实战
自定义View实战
继承View与ViewGroup的模板代码,onMeasure与onDraw的注意事项。
➡️
28
线程
View的线程安全
UI线程限制,Handler与View.post的源码分析。
➡️
29
状态
View的保存与恢复
onSaveInstanceState与onRestoreInstanceState的调用时机。
➡️
30
总结
View绘制流程总结
从源码到实战,绘制流程的完整回顾与性能调优建议。
➡️